package smallfrench.moteur.biblio;

import java.util.HashMap;
import java.util.Map;

import smallfrench.moteur.biblio.err.*;
import smallfrench.moteur.biblio.igu.IGU;
import smallfrench.moteur.interp.Portee;
import smallfrench.moteur.interp.RObjet;

/**
 * La bibliothèque standard...
 * @author antoine1023
 */
public abstract class BibliothequeStandard {

	private BibliothequeStandard() {}

	/**
	 * 
	 * @return Une {@link HashMap}<String, RObjet> de la bibliothèque.
	 */
	public static HashMap<String, RObjet> getMapBibliotheque() {

		HashMap<String, RObjet> map = new HashMap<String, RObjet>();

		ajouterObjetsMap(map, new RObjet[] {
				new AConsole(),
				new RMath(),

				RClasse.CLASSE,
				RClasseBooleen.CLASSE,
				RClasseChaine.CLASSE,
				RClasseCouleur.CLASSE,
				RClasseDecimal.CLASSE,
				RClasseEntier.CLASSE,
				RClasseEnumeration.CLASSE,
				RClasseTache.CLASSE,
				RClasseFlottant.CLASSE,
				RClasseFonction.CLASSE,
				RTemps.TEMPS,

				ADict.CLASSE,
				AIterable.CLASSE,
				AIterateur.CLASSE,
				AListe.CLASSE,
				AListeLiee.CLASSE,
				APosition.CLASSE,
				ATableau.CLASSE,
				ATuple.CLASSE,
				AVecteur2.CLASSE,

				AException.CLASSE,
				ErreurClasse.CLASSE,
				ErreurIndex.CLASSE,
				ErreurMath.CLASSE,
				ErreurOperateurBinaireIndefini.CLASSE,
				ErreurOperateurIndefini.CLASSE,
				ErreurParametres.CLASSE,
				ErreurRien.CLASSE,
				ErreurVariableIndefinie.CLASSE,
				ExceptionInterruption.CLASSE,

		});

		map.put("IGU", IGU.IGU);
		map.put("CreateurClasse", new RCreateurClasses());

		return map;
	}

	private static void ajouterObjetsMap(
			Map<String, RObjet> map,
			RObjet[] t) {

		for (RObjet o : t) {
			map.put(o.toString(), o);
		}
	}

	/**
	 * 
	 * @return Une {@link Portee} de la bibliothèque.
	 */
	public static Portee getBibliotheque() {

		Portee s = new Portee();
		s.ajouterVariables(getMapBibliotheque());

		return s;
	}

}
